#include "Nourriture.h"

void Nourriture_init(t_motte** pMotte, int eTour, int eDifficulte){
	/* Initialise la nourriture en fonction du nombre de tour et de la taille de la matrice */
	int eNbNourriture;
	int eNourriture;
	int eLigne, eColonne;

	te_Nourriture Nourriture;

	eNbNourriture=eNourritureCalcul(pMotte,eTour, eDifficulte);

	for(eNourriture=0;eNourriture<eNbNourriture;eNourriture++){
		Nourriture= NourritureHasard();
		eLigne= eHasard(1,elmax-1);
		eColonne= eHasard(1,ecmax-1);
		while(btest_MotteNourriture(pMotte,eLigne,eColonne)){
			eLigne= eHasard(1,elmax-1);
			eColonne= eHasard(1,ecmax-1);
		}
		pMotte[eLigne][eColonne].Nourriture=Nourriture;
		pMotte[eLigne][eColonne].ptNourriture=100;
	}
}

te_Nourriture NourritureHasard (){
	/* Retourne un type de nourriture au hasard */
	int eTypeNourriture;
	te_Nourriture Nourriture;

	eTypeNourriture = eHasard(0,100);
	if(eTypeNourriture>=0&&eTypeNourriture<5) Nourriture=Poison;
	else if(eTypeNourriture>=5&&eTypeNourriture<10) Nourriture=Non_comestible;
	else if(eTypeNourriture>=10&&eTypeNourriture<15) Nourriture=Plante_seche;
	else if(eTypeNourriture>=15&&eTypeNourriture<50) Nourriture=Plante;
	else if(eTypeNourriture>=50&&eTypeNourriture<97) Nourriture=Ver;
	else if(eTypeNourriture>=97&&eTypeNourriture<100) Nourriture=Vivifiant;

	return Nourriture;
}

int btest_MotteNourriture (t_motte** pMotte, int eLigne, int eColonne){
	/* Test retournant un boolean indiquant si les coordonnées indiquées tombent sur un rattaupe ou sur une motte vide */
	return (pMotte[eLigne][eColonne].Nourriture>0&&pMotte[eLigne][eColonne].eTaupes>0&&pMotte[eLigne][eColonne].eEtatterre==Rien);
}

int eNourritureCalcul (t_motte** pMotte, int eTour, int eDifficulte){
	/* Retourne le nombre de nourriture insérée en fonction de la taille de la matrice et du nombre de tour et de la difficulté */
	int eNbNourriture, eNbNourritureMin, eNbNourritureMax;
	int eNbcase= epMottenonvide (pMotte);
	switch(eDifficulte){
		case 1 :	if(eTour>=0&&eTour<=10){
						eNbNourritureMin = (eNbcase*20)/100;
						eNbNourritureMax = (eNbcase*25)/100;
					}
					else if(eTour>10&&eTour<=20){
						eNbNourritureMin = (eNbcase*15)/100;
						eNbNourritureMax = (eNbcase*20)/100;
					}
					else if(eTour>20&&eTour<=30){
						eNbNourritureMin = (eNbcase*11)/100;
						eNbNourritureMax = (eNbcase*15)/100;
					}
					else if(eTour>30&&eTour<=50){
						eNbNourritureMin = (eNbcase*8)/100;
						eNbNourritureMax = (eNbcase*10)/100;
					}
					else {
						eNbNourritureMin = (eNbcase*2)/100;
						eNbNourritureMax = (eNbcase*3)/100;
					}
					break;
					
		case 2 :	if(eTour>=0&&eTour<=10){
						eNbNourritureMin = (eNbcase*15)/100;
						eNbNourritureMax = (eNbcase*20)/100;
					}
					else if(eTour>10&&eTour<=20){
						eNbNourritureMin = (eNbcase*11)/100;
						eNbNourritureMax = (eNbcase*15)/100;
					}
					else if(eTour>20&&eTour<=35){
						eNbNourritureMin = (eNbcase*8)/100;
						eNbNourritureMax = (eNbcase*10)/100;
					}
					else {
						eNbNourritureMin = (eNbcase*2)/100;
						eNbNourritureMax = (eNbcase*3)/100;
					}
					break;
					
		case 3 :	if(eTour>=0&&eTour<=10){
						eNbNourritureMin = (eNbcase*15)/100;
						eNbNourritureMax = (eNbcase*20)/100;
					}
					else if(eTour>10&&eTour<=20){
						eNbNourritureMin = (eNbcase*8)/100;
						eNbNourritureMax = (eNbcase*10)/100;
					}
					else {
						eNbNourritureMin = (eNbcase*2)/100;
						eNbNourritureMax = (eNbcase*3)/100;
					}
					break;
	}
	
	eNbNourriture = eHasard(eNbNourritureMin,eNbNourritureMax);
	return eNbNourriture;
}
